// src/api/salary.js
import { http } from '@/util/request'

/**
 * 获取薪酬标准列表（分页查询）
 * @param {Object} params - 查询参数
 * @param {string} params.keyword - 搜索关键词（可选，标准编号/名称）
 * @param {string} params.organization - 适用机构（可选）
 * @param {string} params.position - 适用职位（可选）
 * @param {string} params.status - 状态（可选）
 * @param {number} params.page - 页码（可选）
 * @param {number} params.pageSize - 每页数量（可选）
 * @returns {Promise} 返回分页的薪酬标准列表，包含 list、total、page、pageSize
 */
export function getSalaryStandardList(params = {}) {
  return http.get('/salary/standard/list', params)
}

/**
 * 获取薪酬发放列表（分页查询）
 * @param {Object} params - 查询参数
 * @param {string} params.keyword - 搜索关键词（可选，员工编号/姓名）
 * @param {string} params.month - 发放月份（可选，格式：YYYY-MM）
 * @param {string} params.department - 所属部门（可选）
 * @param {string} params.status - 状态（可选）
 * @param {number} params.page - 页码（可选）
 * @param {number} params.pageSize - 每页数量（可选）
 * @returns {Promise} 返回分页的薪酬发放列表，包含 list、total、page、pageSize
 */
export function getSalaryPayList(params = {}) {
  return http.get('/salary/pay/list', params)
}

/**
 * 获取薪酬标准变更列表
 * @param {Object} params - 查询参数
 * @param {number} params.page - 页码（可选）
 * @param {number} params.pageSize - 每页数量（可选）
 * @returns {Promise} 返回分页的薪酬标准变更列表，包含 list、total、page、pageSize
 */
export function getSalaryStandardChangeList(params = {}) {
  return http.get('/salary/standard/change/list', params)
}

/**
 * 获取薪酬发放明细
 * @param {string} batch - 薪酬发放批次号
 * @returns {Promise} 返回薪酬发放明细，包含 batch、month 和 list
 */
export function getSalaryPayDetail(batch) {
  return http.get(`/salary/pay/detail/${batch}`)
}

/**
 * 获取待复核薪酬标准列表
 * @param {Object} params - 查询参数
 * @param {number} params.page - 页码（可选）
 * @param {number} params.pageSize - 每页数量（可选）
 * @returns {Promise} 返回分页的待复核薪酬标准列表，包含 list、total、page、pageSize
 */
export function getSalaryStandardReviewList(params = {}) {
  return http.get('/salary/standard/review/list', params)
}

/**
 * 获取待复核薪酬发放列表
 * @param {Object} params - 查询参数
 * @param {number} params.page - 页码（可选）
 * @param {number} params.pageSize - 每页数量（可选）
 * @returns {Promise} 返回分页的待复核薪酬发放列表，包含 list、total、page、pageSize
 */
export function getSalaryPayReviewList(params = {}) {
  return http.get('/salary/pay/review/list', params)
}

/**
 * 获取薪酬标准详情
 * @param {number|string} id - 薪酬标准ID
 * @returns {Promise} 返回薪酬标准详情，包含 id、code、name、org、position、effectiveDate、status、registrant、registerTime、items 等
 */
export function getSalaryStandardDetail(id) {
  return http.get(`/salary/standard/detail/${id}`)
}

/**
 * 获取可发薪员工列表
 * @param {Object} params - 查询参数
 * @param {string} params.organization - 机构（可选）
 * @returns {Promise} 返回员工列表，包含 id、code、name、organization、position
 */
export function getPayEmployees(params = {}) {
  return http.get('/salary/pay/employees', params)
}

/**
 * 计算薪酬发放明细
 * @param {Object} data - 薪酬计算请求数据
 * @param {string} data.employeeRange - 员工范围：全部、指定部门、指定员工等（必填）
 * @returns {Promise} 返回计算后的薪酬数据，包含 employeeRange、payMonth、payBatch、list（包含实发金额等计算后的数据）
 */
export function calculateSalaryPay(data) {
  return http.post('/salary/pay/calculate', data)
}

/**
 * 提交薪酬发放登记
 * @param {Object} data - 薪酬发放登记数据
 * @param {string} data.employeeRange - 员工范围：全部、指定部门、指定员工等（必填）
 * @param {Array} data.list - 薪酬发放明细列表（必填）
 * @param {string} data.list[].employeeCode - 员工编码（必填）
 * @param {string} data.list[].employeeName - 员工姓名（必填）
 * @param {number} data.list[].baseSalary - 基本工资（必填）
 * @param {number} data.list[].positionSalary - 岗位工资（可选）
 * @param {number} data.list[].allowance - 津贴（可选）
 * @param {number} data.list[].totalPay - 应发总额（必填）
 * @param {number} data.list[].socialSecurity - 社保（可选）
 * @param {number} data.list[].housingFund - 公积金（可选）
 * @param {number} data.list[].tax - 个税（可选）
 * @param {number} data.list[].deduction - 其他扣除（可选）
 * @returns {Promise} 返回登记结果，包含 id、batch、month、status、registerTime（发放月份和批次号由系统自动生成）
 */
export function registerSalaryPay(data) {
  return http.post('/salary/pay/register', data)
}

/**
 * 提交薪酬标准登记
 * @param {Object} data - 薪酬标准登记数据
 * @param {string} data.standardCode - 薪酬标准编码（必填）
 * @param {string} data.standardName - 薪酬标准名称（必填）
 * @param {string} data.organization - 所属机构名称（必填）
 * @param {number} data.organizationId - 所属机构ID（必填）
 * @param {string} data.position - 职位名称（必填）
 * @param {number} data.positionId - 职位ID（必填）
 * @param {string} data.effectiveDate - 生效日期（必填，格式：YYYY-MM-DD）
 * @param {Array} data.items - 薪酬标准明细项列表（必填）
 * @param {string} data.items[].itemName - 项目名称（必填）
 * @param {number} data.items[].amount - 金额（必填）
 * @returns {Promise} 返回登记结果，包含 id、code、status、registerTime
 */
export function registerSalaryStandard(data) {
  return http.post('/salary/standard/register', data)
}

/**
 * 提交薪酬标准复核
 * @param {number|string} id - 薪酬标准ID（必填）
 * @param {Object} data - 复核数据
 * @param {string} data.result - 复核结果（可选，如："通过"、"不通过"）
 * @param {string} data.comment - 复核意见（可选）
 * @returns {Promise} 返回复核结果，包含 id、status、reviewTime、reviewer、comment
 */
export function reviewSalaryStandard(id, data) {
  return http.post(`/salary/standard/review/${id}`, data)
}

/**
 * 提交薪酬发放复核
 * @param {number|string} id - 薪酬发放ID（必填）
 * @param {Object} data - 复核数据
 * @param {string} data.result - 复核结果（可选，如："通过"、"不通过"）
 * @param {string} data.comment - 复核意见（可选）
 * @returns {Promise} 返回复核结果，包含 id、status、reviewTime、reviewer、comment
 */
export function reviewSalaryPay(id, data) {
  return http.post(`/salary/pay/review/${id}`, data)
}
